package org.zjx.controller;


import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.zjx.common.bean.Result;
import org.zjx.dao.dto.AccountDTO;
import org.zjx.dao.entity.Account;
import org.zjx.dao.vo.AccountVO;
import org.zjx.service.IAccountService;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 
 * @since 2025-05-28
 */
@Tag(name = "账户管理接口")
@RestController
@RequestMapping("/account")
@RequiredArgsConstructor    // lombok注解：在构造方法中只会注入必须需要初始化的成员变量，例如加了final且未初始化的变量，将来不需要做注入的变量不加final即可
public class AccountController {
    // Spring不推荐我们使用@Autowired进行属性注入，推荐我们使用构造器注入，但当需要注入的成员变量很多的时候，构造方法会显得特别长，因此我们可以将需要注入的变量加上final，并且使用lombok的@RequiredArgsConstructor注解提供必要参数构造器
    private final IAccountService accountService;


    @Operation(summary = "根据id查询账户接口")
    @GetMapping("/{id}")
    public Result<AccountVO> queryUserById(@Parameter(description = "用户id") @PathVariable("id") Long id) {
        // 查询用户PO
        AccountVO account = accountService.getAccountVOByAccountId(id);
        // 将PO拷贝到VO
        return Result.isOk().data(account);
    }

    @Operation(summary = "根据帐号查询账户接口")
    @GetMapping("/account/{account}")
    public Result<AccountVO> queryUserById(@Parameter(description = "账户号") @PathVariable("account") String account) {
        // 查询用户PO
        AccountVO account1 = accountService.getAccountVOByAccount(account);
        // 将PO拷贝到VO
        return Result.isOk().data(account1);
    }

    @Operation(summary = "根据手机号查询将军令")
    @GetMapping("/phone/{phone}")
    public Result<String> queryGeneral(@Parameter(description = "手机号") @PathVariable("phone") String phone){
        return Result.isOk().data(accountService.queryGeneral(phone));
    }


    @Operation(summary = "根据手机号上传将军令")
    @PostMapping("/updateGeneral")
    public Result<AccountVO> updateGeneral(@RequestBody AccountDTO accountDTO) {
        boolean b = accountService.updateAccountGeneral(accountDTO);
        if (b){
            return Result.isOk();
        }else {
            return Result.isFail();
        }
    }
}
